package

{

	import fl.controls.TextArea;

	import fl.controls.Button;

	import fl.controls.TextInput;

	import flash.display.Sprite;

	import flash.events.SyncEvent;

	import flash.events.NetStatusEvent;

	import flash.events.MouseEvent;

	import flash.events.FocusEvent;

	import flash.net.SharedObject;

	import flash.net.NetConnection;

	import fl.events.ComponentEvent;



	public class TextChat extends Sprite

	{

		private var button:Button;

		private var text_so:SharedObject;

		private var nc:NetConnection;

		private var textArea:TextArea;

		private var textInput:TextInput;

		private var chatName:TextInput;

		private var rtmpGo:String;

		private var good:Boolean;

		private var catchKey:Boolean;

		private var noName:Boolean;

		public function TextChat()

		{

			//Set up UIs

			textArea = new TextArea();
			textArea.setSize(500, 280);

			textArea.move(20, 54);

			addChild(textArea);



			textInput = new TextInput();

			textInput.setSize(500, 24);

			textInput.move(20, 340);

			textInput.addEventListener(ComponentEvent.ENTER, checkKey);

			addChild(textInput);



			button = new Button();

			button.width = 50;

			button.label = "Send";

			button.move(20, 370);

			button.addEventListener(MouseEvent.CLICK, sendMsg);

			addChild(button);



			chatName = new TextInput;

			chatName.setSize(100, 24);

			chatName.move(80, 370);

			chatName.text = "<Enter Name>";

			chatName.addEventListener(FocusEvent.FOCUS_IN, cleanName);

			addChild(chatName);



			rtmpGo = "rtmp://192.168.1.209/test";

			nc = new NetConnection();

			nc.connect(rtmpGo);

			nc.addEventListener(NetStatusEvent.NET_STATUS, doSO);

		}



		private function doSO(e:NetStatusEvent):void

		{

			good = e.info.code == "NetConnection.Connect.Success";

			if (good)

			{

				//Set up shared object

				text_so = SharedObject.getRemote("test", nc.uri, false);

				text_so.connect(nc);

				text_so.addEventListener(SyncEvent.SYNC, checkSO);

			}

		}



		private function checkSO(e:SyncEvent):void

		{

			for (var chng:uint; chng < e.changeList.length; chng++)

			{

				switch (e.changeList[chng].code)

				{

					case "clear":

						break;



					case "success":

						break;



					case "change":

						textArea.appendText(text_so.data.msg + "\n");

						break;

				}

			}

		}



		private function cleanName(e:FocusEvent):void
		{

			chatName.text = "";

		}



		private function sendMsg(e:MouseEvent):void

		{

			noName = (chatName.text == "<Enter Name>" || chatName.text == "");

			if (noName)

			{

				textArea.appendText("You must enter your name \n");

			}

			else

			{

				text_so.setProperty("msg", chatName.text + ": " + textInput.text);

				textArea.appendText(chatName.text + ": " + textInput.text + "\n");

				textInput.text = "";

			}

		}



		private function checkKey(e:ComponentEvent):void

		{

			noName = (chatName.text == "<Enter Name>" || chatName.text == "");

			if (noName)

			{

				textArea.appendText("You must enter your name \n");

			}

			else

			{

				text_so.setProperty("msg", chatName.text + ": " + textInput.text);

				textArea.appendText(chatName.text + ": " + textInput.text + "\n");

				textInput.text = "";

			}

		}

	}

}
